package com.tencent.basic.controller;

import com.tencent.basic.util.AjaxResult;
import com.tencent.basic.util.FastDfsUtil;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * 上传
 * 下载 = 不需要
 * 删除
 * 更新 = 删除 + 上传
 */
@RestController
@RequestMapping("/fastDfs")
public class FastDfsController {

    @PostMapping
    //@RequestPart对复杂表单项的处理，elmentUI默认name="file",Multipart xxx要与上传文件的name属性值一致(file)
    public AjaxResult upload(@RequestPart MultipartFile file) {
        try {
            // file里面包含了这个图片的所有信息 所以我们可以通过它拿到我们想要的东西
            // 这个我还不知道是啥 但是工具类里文件上传需要这个东西
            byte[] fileBytes = file.getBytes();

            // 还需要一个文件类型 我们可以通过截取字符串获取
            String originalFilename = file.getOriginalFilename(); // 图片原始名字
            // 原始名字随后一个点的下标+1开始截取 (因为含头不含尾 所以要+1开会获取到没有 . 的 - 文件类型)
            String extName = originalFilename.substring(originalFilename.lastIndexOf(".")+1);

            // 调用工具类上传 工具类里返回的是 return  "/"+fileIds[0]+"/"+fileIds[1];
            String upload = FastDfsUtil.upload(fileBytes, extName);

            // 所以upload就是图片的路径 .me()默认成功 只需要set把upload传过去就行
            return AjaxResult.me().setResultObj(upload);

        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("上传失败！");
        }
    }

    @DeleteMapping
    // 之前我们是怎么接收的删除的id的呢 - http://localhost:8080/fastDfs/1  就是通过{id}将id传过来
    // 但是这个path很长 /grooup1/xx/xx/xxxxxxx 可能会出现问题 我们回顾一下发送同步请求的时候是怎么做的
    // http://localhost:8080/fastDfs?path=xxxxx  所以我们通过@RequestParam接收前端传递来的路径
    public AjaxResult delete(@RequestParam() String path) {
        try { // 这个path就是我们的路径 但是要删除 需要拆分成 组(卷) + 路径 的方式去删除

            // 从下标1开始截取
            String pathTemp = path.substring(1); // 截取出来是 grooup1/xx/xx/xxxxxxx

            // 截取组名
            String group = pathTemp.substring(0, pathTemp.indexOf("/")); // 含头不含尾
            // 截取文件路径
            String fileName = pathTemp.substring(pathTemp.indexOf("/")+1);
            // 调用删除
            FastDfsUtil.delete(group, fileName);
            return AjaxResult.me();
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.me().setSuccess(false).setMessage("删除失败！");
        }
    }
}